import axios from 'axios'
import type {
    AxiosRequestConfig,
    InternalAxiosRequestConfig,
    AxiosResponseHeaders,
} from 'axios'
import { ElMessage } from 'element-plus'
//创建axios实例
const request = axios.create({
    baseURL: import.meta.env.VITE_APP_BASE_API,
    timeout: 5000,
})
export interface AxiosResponse<T = any, D = any> {
    data: T
    status: number
    statusText: string
    headers: AxiosResponseHeaders
    config: AxiosRequestConfig<D>
    request?: any
}
// 请求拦截器
request.interceptors.request.use(
    (config: InternalAxiosRequestConfig) => {
        // 在发送请求之前做一些处理，例如添加 token
        const token = localStorage.getItem('token')
        if (token) {
            config.headers = config.headers || {}
            config.headers.Authorization = `Bearer ${token}`
        }
        config.headers.token = 'Admin Token'
        return config
    },
    (error) => {
        // 对请求错误做些什么
        return Promise.reject(error)
    },
)
//响应拦截器
request.interceptors.response.use(
    (response) => {
        // 对响应数据做些什么
        const { code, message } = response.data
        if (code === 200) {
            // 返回完整的 response 对象
            return response.data
        } else {
            return Promise.reject(new Error(message || '请求失败'))
        }
    },
    (error) => {
        //处理网络错误
        let msg = ''
        const status = error.response.status
        switch (status) {
            case 401:
                msg = 'token过期'
                break
            case 403:
                msg = '无权访问'
                break
            case 404:
                msg = '请求地址错误'
                break
            case 500:
                msg = '服务器出现问题'
                break
            default:
                msg = '无网络'
        }
        ElMessage({
            type: 'error',
            message: msg,
        })
        return Promise.reject(error)
    },
)
export default request
